//package work.rightAnswer;
//
//import java.util.ArrayList;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
//class Solution_30 {
//    public List<Integer> findSubstring(String s, String[] words) {
//        int singleWordLen = words[0].length();
//        List<Integer> list = new ArrayList<>();
//        for (int i = 0; i < singleWordLen; i++) {
//            findStr(s,words,i,list);
//        }
//        return list;
//    }
//
//
//    public void findStr(String s, String[] words,int i,List<Integer> list){
//        Map<String,Integer> map = new HashMap<>();
//        //1.将所有字符串放入map中，key为word，value为起始索引
//        for (String word : words) {
//            map.put(word,map.getOrDefault(word,0)+1);
//        }
//        Map<String,Integer> originMap = new HashMap<>(map);
//        //2.遍历字符串，用滑动窗口思想，每次动3格
//        int left = i;
//        int right = i;
//        int wordsLength = words.length*words[0].length();
//        int singleWordLen = words[0].length();
//        //3.分情况
//        //right +=singleWordLen  subString(right-singleWordLen,right) 是不是map中的key和value是不是等于0
//        //是key，value不为0,，是否right-left == wordsLength&&，是的话，list.add(left)，left+=singleWordLen;
//        // 无论是否，map.put(curStr,map.get(curStr)-1);
//        //是key，value为0,循环,直到subString(left,left+singleWordLen).equals(curStr),
//        // 循环体，1.left+=singleWordLen,2.map.put(curStr,map.get(curStr)+1)。出循环left += singleWordLen
//        //不是key，left = right
//        while (right<=s.length()-singleWordLen){
//            right+=singleWordLen;
//            String curStr = s.substring(right-singleWordLen, right);
//            if(!map.containsKey(curStr)){
//                left = right;
//                map = new HashMap<>(originMap);
//                continue;
//            }
//
//            Integer value = map.get(curStr);
//            if(value==0){
//                String curSub = s.substring(left,left+singleWordLen);
//                while (!curSub.equals(curStr)){
//                    left+=singleWordLen;
//                    map.put(curSub, map.get(curSub)+1);
//                    curSub = s.substring(left,left+singleWordLen);
//                }
//                left+=singleWordLen;
//            }else {
//                if(right-left==wordsLength){
//                    String substring = s.substring(left, left + singleWordLen);
//                    list.add(left);
//                    map.put(substring,map.get(substring)+1);
//                    left+=singleWordLen;
//                }
//                map.put(curStr,map.get(curStr)-1);
//            }
//        }
//    }
//}